package persistencia.dominio;
import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
import javax.jdo.Transaction;
import java.util.*;
import javax.jdo.Extent;
import javax.jdo.Query;
import utils.IniFile;
import comun.constantes.*;
import java.io.*;
import server.Singleton;
import java.sql.*;
import javax.swing.*;
import comun.*;
import server.aula.ControlAula;
import persistencia.*;

public class AdministracionManual {

  public AdministracionManual() {
  }

  static private void  agregarPermisosCalificaciones(Persistencia persis,
    Curso curso,
    TipoUsuario tipoUsuarioAdministrador,
    TipoUsuario tipoUsuarioAlumno,
    TipoUsuario tipoUsuarioTutor,
    TipoPermiso tipoPermisoEscritura,
    TipoPermiso tipoPermisoLectura,
    Recurso recursoCalificacionesVistaAlumno,
    Recurso recursoCalificacionesVistaTutor)
{
  // obtengo las comisiones
  try {
    for (Iterator i = curso.getAulas().iterator(); i.hasNext(); ) {
       Comision comision = (Comision)i.next();

       // creo permiso para el administrador
       PermisoAcceso permisoAccesoAdministrador = new PermisoAcceso();
       persis.hacerPersistente(permisoAccesoAdministrador);
       permisoAccesoAdministrador.setAula(comision);
       permisoAccesoAdministrador.setTipoPermiso(tipoPermisoLectura);
       permisoAccesoAdministrador.setRecurso(recursoCalificacionesVistaTutor);
       permisoAccesoAdministrador.setTipoUsuario(tipoUsuarioAdministrador);

/* comentado para crear los permisis de calificaciones al director
       // creo permiso para el Tutor
       PermisoAcceso permisoAccesoTutor = new PermisoAcceso();
       persis.hacerPersistente(permisoAccesoTutor);
       permisoAccesoTutor.setAula(comision);
       permisoAccesoTutor.setTipoPermiso(tipoPermisoEscritura);
       permisoAccesoTutor.setRecurso(recursoCalificacionesVistaTutor);
       permisoAccesoTutor.setTipoUsuario(tipoUsuarioTutor);
       // creo permiso para el Alumno
       PermisoAcceso permisoAccesoAlumno = new PermisoAcceso();
       persis.hacerPersistente(permisoAccesoAlumno);
       permisoAccesoAlumno.setAula(comision);
       permisoAccesoAlumno.setTipoPermiso(tipoPermisoLectura);
       permisoAccesoAlumno.setRecurso(recursoCalificacionesVistaAlumno);
       permisoAccesoAlumno.setTipoUsuario(tipoUsuarioAlumno);
  */   }
     System.out.println("------ creo EL PERMISO PARA EL AULA: "+curso.getNombre()+"--- id:"+curso.getId());
  }
  catch (Exception ex) {
    ex.printStackTrace();
    System.out.println("------ EXITES EL PERMISO PARA EL AULA: "+curso.getNombre()+"--- id:"+curso.getId());
  }

}


// Agrega el permiso para el recuros calificaicones a todas las aulas no finalizadas
static public String  agregarPermisosCalificacionesAlumnoTutorAdministradorAulasNoFinalizadas()
{
  // creo los permisos para el la carerra

  Persistencia  persis = null;
  try {
    persis = new Persistencia();
    persis.crearTransaccion();
//    TipoUsuario tipoUsuarioAdministrador = (TipoUsuario) persis.getObjectosPorClaseYFiltro("persistencia.dominio.TipoUsuario","nombre ==\""+TIPO_USUARIOS.ADMINISTRADOR+"\"").elementAt(0);
    TipoUsuario tipoUsuarioAdministrador = (TipoUsuario) persis.getObjectosPorClaseYFiltro("persistencia.dominio.TipoUsuario","nombre ==\""+TIPO_USUARIOS.DIRECTOR+"\"").elementAt(0);

    TipoUsuario tipoUsuarioAlumno = (TipoUsuario) persis.getObjectosPorClaseYFiltro("persistencia.dominio.TipoUsuario","nombre ==\""+TIPO_USUARIOS.ALUMNO+"\"").elementAt(0);
    TipoUsuario tipoUsuarioTutor = (TipoUsuario) persis.getObjectosPorClaseYFiltro("persistencia.dominio.TipoUsuario","nombre ==\""+TIPO_USUARIOS.TUTOR+"\"").elementAt(0);
    TipoPermiso tipoPermisoEscritura = (TipoPermiso) persis.getObjectosPorClaseYFiltro("persistencia.dominio.TipoPermiso","descripcion ==\""+TIPO_PERMISOS.ESCRITURA+"\"").elementAt(0);
    TipoPermiso tipoPermisoLectura = (TipoPermiso) persis.getObjectosPorClaseYFiltro("persistencia.dominio.TipoPermiso","descripcion ==\""+TIPO_PERMISOS.LECTURA+"\"").elementAt(0);
    Recurso recursoCalificacionesVistaAlumnos = (Recurso) persis.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre ==\""+RECURSOS.CALIFICACIONES_VISTA_ALUMNO+"\"").elementAt(0);
    Recurso recursoCalificacionesVistaTutor = (Recurso) persis.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre ==\""+RECURSOS.CALIFICACIONES_VISTA_TUTOR+"\"").elementAt(0);

    Vector cursos  =  persis.getObjectosPorClaseYFiltro("persistencia.dominio.Curso","estadoAula.descripcion !=\""+ESTADO_AULAS.FINALIZADO+"\" && estadoAula.descripcion !=\""+ESTADO_AULAS.ELIMINADO+"\"");
    System.out.println("cantidad de cursos: "+cursos.size());
    for (Iterator i = cursos.iterator(); i.hasNext(); ) {
      Curso curso = (Curso)i.next();
      agregarPermisosCalificaciones(persis,
                                    curso,
                                    tipoUsuarioAdministrador,
                                    tipoUsuarioAlumno,
                                    tipoUsuarioTutor,
                                    tipoPermisoEscritura,
                                    tipoPermisoLectura,
                                    recursoCalificacionesVistaAlumnos,
                                    recursoCalificacionesVistaTutor);
    }


    persis.commit();
    System.out.println("***** ANDO       la cartga de permisos calificacionesd:");
    return "Ando";
  }
  catch (Exception ex) {
    System.out.println("***** FALLO la cartga de permisos calificacionesd:");
    persis.rollback();
    ex.printStackTrace();
    return "NO Ando";
  }
}


// Agrega el estado eliminado al aula
static public String  agregarEstadoEliminado()
{
  // creo los permisos para el la carerra

  Persistencia  persis = null;
  try {
    persis = new Persistencia();
    persis.crearTransaccion();
    EstadoAula estadoAulaEliminado = new EstadoAula();
    estadoAulaEliminado.setDescripcion(ESTADO_AULAS.ELIMINADO);
    persis.hacerPersistente(estadoAulaEliminado);
    persis.commit();
    return "ANDO";
  }
  catch (Exception ex) {
    System.out.println("***** FALLO el agregado del estado elimnidao:");
    persis.rollback();
    ex.printStackTrace();
    return "NO Ando";
  }
}


public static String agregarCalificacionNoEntregoATodasLasEscalas()
{
  Persistencia  persis = null;

  try {
    persis = new Persistencia();
    persis.crearTransaccion();

    Vector tipoCalificaciones =  persis.getObjectosPorClase("persistencia.dominio.TipoCalificacion");

    Enumeration enum = tipoCalificaciones.elements();
    while (enum.hasMoreElements()) {
      TipoCalificacion tipoCalificacion = (TipoCalificacion)enum.nextElement();
      // obtengo la calificacion que esta en ultimo orden que siempre es la en_correccion
      // para poder calcular el orden la la cal. rehacer
      try {
        ValorCalificacion valorCalificacionRehacer  =  ((ValorCalificacion)persis.getObjectosPorClaseYFiltro("persistencia.dominio.ValorCalificacion","nombre ==\""+comun.constantes.TIPOS_CALIFICACION.REHACER+"\" && tipoCalificacion.id == "+tipoCalificacion.getId()).elementAt(0));
        ValorCalificacion valorCalificacionNoEntrego = new ValorCalificacion();
        valorCalificacionNoEntrego.setNombre(TIPOS_CALIFICACION.NO_ENTREGO);
        valorCalificacionNoEntrego.setOrden(new Integer(valorCalificacionRehacer.getOrden().intValue()+1));
        persis.hacerPersistente(valorCalificacionNoEntrego);
        valorCalificacionNoEntrego.setTipoCalificacion(tipoCalificacion);
      }
      catch (Exception ex) {
      }

    }

    persis.commit();
    return "ANDO";
  }
  catch (Exception ex) {
    persis.rollback();
    ex.printStackTrace();
    return "NO Ando";
  }

}



static public String  agregarRecursoAdministracion()
{
  Persistencia  persis = null;
  try {
    persis = new Persistencia();
    persis.crearTransaccion();

/*    Recurso recursoAdministracion = new Recurso();
    recursoAdministracion.setNombre(RECURSOS.ADMINISTRACION);
    recursoAdministracion.setDescripcion(RECURSOS.ADMINISTRACION);
    persis.hacerPersistente(recursoAdministracion);
*/
    Recurso recursoRespuestasFrecuentesFAQGPC = new Recurso();
    recursoRespuestasFrecuentesFAQGPC.setNombre(RECURSOS.RESPUESTAS_FRECUENTES_FAQ_GPC);
    recursoRespuestasFrecuentesFAQGPC.setDescripcion(RECURSOS.RESPUESTAS_FRECUENTES_FAQ_GPC);
    persis.hacerPersistente(recursoRespuestasFrecuentesFAQGPC);

    Recurso recursoPreguntasFrecuentesFAQGPC = new Recurso();
    recursoPreguntasFrecuentesFAQGPC.setNombre(RECURSOS.PREGUNTAS_FRECUENTES_FAQ_GPC);
    recursoPreguntasFrecuentesFAQGPC.setDescripcion(RECURSOS.PREGUNTAS_FRECUENTES_FAQ_GPC);
    persis.hacerPersistente(recursoPreguntasFrecuentesFAQGPC);


    persis.commit();
    return "Ando";
  }
  catch (Exception ex) {
    ex.printStackTrace();
    persis.rollback();
    return "No Ando";
  }

}



static public String  agregarParticipanteComision(int cant)
{
  Persistencia  persis = null;
  try {
    persis = new Persistencia();
    persis.crearTransaccion();

    for (int i = 0; i<cant;i++)
    {
      ParticipanteComision participanteComision = new ParticipanteComision();
      persis.hacerPersistente(participanteComision);
    }

    persis.commit();
    return "Ando";
  }
  catch (Exception ex) {
    ex.printStackTrace();
    persis.rollback();
    return "No Ando";
  }

}


static public String  agregarTpoCalificacionAbierta()
{
  Persistencia  persis = null;
  try {
    persis = new Persistencia();
    persis.crearTransaccion();

    TipoCalificacion tipoCalificacionAbierta = new TipoCalificacion();
    tipoCalificacionAbierta.setNombre(TIPOS_CALIFICACION.ABIERTA);
    persis.hacerPersistente(tipoCalificacionAbierta);


    persis.commit();
    return "Ando";
  }
  catch (Exception ex) {
    ex.printStackTrace();
    persis.rollback();
    return "No Ando";
  }
}


static public String  agregarTipoAulaInvestigacion()
{
  Persistencia  persis = null;
  try {
    persis = new Persistencia();
    persis.crearTransaccion();

    TipoAula tipoAula = new TipoAula();
    tipoAula.setNombre(TIPO_AULAS.ORGANIZACION_INVESTIGACION_EVALUACION_PROYECTO);
    persis.hacerPersistente(tipoAula);


    persis.commit();
    return "Ando";
  }
  catch (Exception ex) {
    ex.printStackTrace();
    persis.rollback();
    return "No Ando";
  }
}



}